package com.xjh.basestudy.lanqiaobei;

public class BinarySearchNoRecur {

    public static void main(String[] args) {
        // 示例数组（必须是有序的）
        int[] array = {1, 3, 5, 7, 9, 11, 13, 15};
        int target = 7; // 要查找的目标值

        // 调用二分查找方法
        int index = binarySearch(array, target);

        // 输出结果
        if (index != -1) {
            System.out.println("目标值 " + target + " 的索引是：" + index);
        } else {
            System.out.println("目标值 " + target + " 不在数组中");
        }
    }

    /**
     * 二分查找算法
     *
     * @param array  有序数组
     * @param target 要查找的目标值
     * @return 目标值的索引，如果未找到则返回 -1
     */
    public static int binarySearch(int[] array, int target) {
        int left = 0;                  // 左边界
        int right = array.length - 1;  // 右边界
        while (left <= right) {
            int mid = left + (right - left) / 2; // 计算中间索引，避免溢出
            if (array[mid] == target) {
                return mid; // 找到目标值，返回索引
            } else if (array[mid] < target) {
                left = mid + 1; // 目标值在右半部分，向右移动左边界
            } else {
                right = mid - 1; // 目标值在左半部分，向左移动右边界
            }
        }

        return -1; // 未找到目标值
    }
}
